Many of today's application programs utilize the Open Database Connectivity (ODBC) interface to access data in Database Management Systems (DBMSs) using the Structured Query Language (SQL). The ODBC interface provides interoperability, where a single application program can access data from many different DBMSs. This interoperability allows an application developer to develop, compile, and ship an application program without targeting a specific DBMS. When a user then buys the application program, the user can add modules, known as database drivers, which link the application program to the user's choice of DBMSs. The ODBC interface is more clearly described in ODBC 2.0 Programmer's Reference and SDK Guide, Microsoft Press (1994), at pages 3-15, 23-87, and 181-519.
When accessing a DBMS using the ODBC interface, an application program utilizes various functions of the interface to issue ODBC commands containing SQL statements to the database driver, which then sends the SQL statements to the DBMS. After receiving the SQL statements, the DBMS processes them. Although the ODBC interface provides interoperability, many existing DBMSs (known as legacy DBMSs) either do not have an ODBC database driver for use with an ODBC-compliant application program or do not allow access from entities other than a single application program that acts as the legacy DBMS's only client. In both of these situations, an ODBC-compliant application program cannot access the data contained in the legacy DBMS. Because there are many legacy DBMSs, this limitation is significant, as the limitation renders the data in these legacy DBMSs inaccessible. It is therefore desirable to integrate legacy DBMSs with application programs that utilize the ODBC interface.